/**
 * @author Tendo
 * @date 2021/7/14
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 * @desc 二分查找
 */

const search = (nums, target) => {
    let l = 0, // 查询范围左边界
        r = nums.length - 1, // 查询范围右边界
        guess // 猜测位置
    
    while(l <= r) {
        guess = Math.floor( (l+r)/2 ) 
        // 循环不变式
        // guess等于l,r中间位置
        // l:查找范围左 r:查找范围右
        if(nums[guess] === target) return guess
        else if(nums[guess] > target) r = guess - 1
        else l = guess + 1
        // 循环不变式
        // l:新查找范围左 r:新查找范围右
    }
    return -1
}
